package cz.vse.adventura.po1715.xforv00_forejt.hra;

import java.util.ArrayList;
import java.util.List;




/*******************************************************************************
 * Instance třídy {@code Postava} představují postavu, která se vyskytuje ve hře,
 * hráč s ní může komunikovat a předávat předměty
 *
 * @author Vladimír Forejt
 */
public class Postava extends Předmět {



//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
    

//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================

    /**Předmět, který má postava u sebe */
    private Předmět předmět;

    /**Seznam předmětů, které jsou potřeba postavě dát, aby vydala svůj předmět*/
    private List<String> požadovanéPředměty = new ArrayList<String>();
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     *
     */
    public Postava(String název, String předmět, String[] požadovanéPředměty)
    {
        super (název);
     
        this.předmět = new Předmět(předmět);
        for (int i=0; i < požadovanéPředměty.length; i++) {
            this.požadovanéPředměty.add(požadovanéPředměty[i]);
        }
        super.osoba = true;
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================

    /**Vrací odkaz na předměty, které osoba požaduje
     *
     * @return předměty
     */
    List<String> getPožadované() {
        return požadovanéPředměty;
    }

//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================

    /** Prohledá seznam předmětů, které postava vyžaduje. Pokud chce zadaný
     * předmět, vrací true a odebere si ho ze seznamu
     *
     * @param název
     * @return true, když zadaný předmět přijme
     */
    boolean přijmePředmět(String název)
    {
        boolean přijme = false;
        for(String požadovaný : požadovanéPředměty) {
            if (název.equalsIgnoreCase(požadovaný)) {
                požadovanéPředměty.remove(požadovaný);
                přijme = true;
                break;              //----------------------------->
            }
        }
        return přijme;
    }

    /**
     * Vydá předmět, který má postava u sebe
     * @return vrací odkaz na předmět. Pokud už ho vydala, vrací {@code null}
     */
    Předmět vydejPředmět() {
        Předmět vydaný = null;
        vydaný = předmět;
        předmět = null;
        return vydaný;
    }

//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTY A METODA MAIN =======================================================
//
//     /***************************************************************************
//      * Testovací metoda.
//      */
//     public static void test()
//     {
//         Postava instance = new Postava();
//     }
//     /** @param args Parametry příkazového řádku - nepoužívané. */
//     public static void main(String[] args)  {  test();  }
}
